package com.mastercard.assets.web.struts.actions;

import java.io.IOException;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.mastercard.assets.MasterCardException;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.CatalogoNuevoItemForm;
import com.mastercard.assets.web.struts.forms.LoginForm;
import com.mastercard.assets.web.util.to.UserLogin;
import com.mastercard.assets.web.util.to.UserTO;

public class CrearUsuarioCrear
	extends
		Action
{
	public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
	{
		HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
		
		// cambia el form
		CatalogoNuevoItemForm f = ( CatalogoNuevoItemForm ) form ;
		try
		{
			// toma los niveles puestos por el usuario
			int[ ] niveles = f.getCampoIntArr1( ) ;
                        String clvAgencia = f.getCampo6() ;
			
			// forzosamente debe traer niveles
			// toma el userTO
			UserTO newUser = user.getNewUser( ) ;
			
			// asigna los niveles
			newUser.setLevels( niveles ) ;
			
			int id = newUser.registerUser( ) ;
                        
                        if ( clvAgencia != null && id != -1 ) {
                            
                            int cvlagencia = Integer.parseInt(clvAgencia) ;
                            boolean addAgencieToUser = MasterCardDAO.addAgencieToUser( id , cvlagencia );
                            
                        }
			
                        
			// en caso de que se cumpla, guarda el WorkArea
//			user.setNextWorkArea( "/CalcularListaCatalogosUsuarios.do" ) ;
			user.setNextWorkArea( "/EditarUsuarioBuscarReg.do?regId=" + id ) ;
                        
                        String mail = newUser.getEmail( ), subject = "Datos de su cuenta en SAMM", mensaje;
                        
                        mensaje = " Estimado Usuario:\n"
                            +"\nUna cuenta ha sido creada en su nombre o usted ha solicitado el envío de los datos de su cuenta por este medio, a continuación encontrará sus datos de acceso al sistema SAMM.:\n"
                            + "\n"
                            + "\n"
                            + "\n"
                            + "Usuario: " + newUser.getLogin() + "\n"
                            + "Contraseña: " + newUser.getPass() + " "
                            + "\n"
                            + "\n Ingresa aquí: http://mastercard.codice.com/MasterCard/"
                            + "\n"
                            + "\n"
                            + "Por favor no responda a esta dirección de correo electrónico.\n"
                            + "Si requiere de mayor información envíe un correo electrónico a: asksamm@mastercard.com \n"
                            + "\n";
			
                        MCUtil.sendMail(mail, subject, mensaje);
                        user.setMessageError( "El usuario ha sido registrado exitosamente y "
                                + "los datos para ingresar han sido enviados a la cuenta de correo registrada." );
                        
			//user.clearMessageError( ) ;
		}catch( MasterCardException mce )
		{
                    MasterCardDAO.closeEntityManager( ) ;
			// verifica el tipo de error
			switch( mce.getErrorCode( ) )
			{
				//  caso de que ya exista el tipo de cuenta con el nombre dado
				case MCUtil.MASTERCARD_ERROR_CODE_CATALOGUE_USER_ALREADY_EXIST :
					user.setMessageError( mce.getSingularMessage( ) ) ;
					
					// en caso de que se cumpla, guarda el WorkArea
					user.setNextWorkArea( "/WEB-INF/pages/WorkArea/CrearUsuario.jsp" ) ;
					
					break ;
					
				default :
					user.setMessageError( mce.getMessage( ) ) ;
					
					// en caso de que se cumpla, guarda el WorkArea
					user.setNextWorkArea( "/CalcularListaCatalogosUsuarios.do" ) ;
					
					break ;
			}
		}
		
                MasterCardDAO.closeEntityManager( ) ;
	  	return mapping.findForward( "success" ) ;
	}
	
}
